home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magnum One
/
Magnum One (Mid-American Digital) (Disc Manufacturing).iso
/
d12
/
asmbler.arc
/
DDI.ASM
< prev
next >
Wrap
Assembly Source File
|
1988-11-19
|
2KB
|
63 lines
CLIP EQU 0
assume cs:ddi
ddi segment para public 'code'
public ddinf, ddisb
include dos.inc
db "<<DDISB>>" ; for debug purposes
MINx equ 0 ; screen extents
MAXx equ 967 ; " "
MINy equ 0 ; " "
MAXy equ 511 ; " "
kx equ [bp+8] ; stack frame argument positions
ky equ [bp+6]
ddisb proc far ; ddisb (kx,ky : integer) { set bit at kx,ky }
push bp ; save bp
mov bp,sp ; bp is now base pointer to stack frame (args)
push cx ; save registers
push dx ; save registers
mov cx,kx ; column number
mov dx,ky ; row number
IF CLIP
cmp cx,MINx ; check for MINx <= kx <= MAXx
jb noplot
cmp cx,MAXx
ja noplot
cmp dx,MINy ; check for MINy <= kx <= MAXy
jb noplot
cmp dx,MAXy
ja noplot
ENDIF
push ax ; save register
mov al,81h ; want exclusive-OR with current color
mov ah,$VIDEO_SETDOT ; code to set a dot in video map
int $VIDEO ; set the dot
pop ax ; restore register
noplot: ; skip here if (kx,ky) out of range
pop dx ; restore register
pop cx ; restore register
pop bp ; restore bp
ret 4 ; return to caller, popping 2 args
ddisb endp
db "<<DDINF>>" ; for debug purposes
ddinf proc far ; ddinf; {new frame - clear screen}
push ax
mov al,8 ; QS mode
mov ah,$VIDEO_SETMODE
int $VIDEO
mov ah,18 ; QS clear screen function code
int $VIDEO ; clear the screen
pop ax
ret ; return to caller
ddinf endp
ddi ends
end